import type { NextApiResponse, NextApiRequest } from 'next'
import type { Response } from '../types/type'

/**
 * 统一错误处理
 * @param {NextApiRequest} req
 * @param {NextApiResponse} res
 * @param {Function} next
 */
export const catchError = async (
  req: NextApiRequest,
  res: NextApiResponse,
  next: () => void
) => {
  try {
    await next()
  } catch (error) {
    const { status = 500, message = '' } = error as {
      status: number
      message: string
    }
    console.log('捕获到异常', message)
    res.status(status).json({
      code: status,
      time: (Date.now() * 1000 * 60 * 60 * 8).toString(),
      success: false,
      message,
      data: {
        url: req.url,
        method: req.method,
        [Object.keys(req.query).length ? 'query' : Symbol.for('query')]:
          req.query,
        [Object.keys(req.body).length ? 'body' : Symbol.for('body')]: req.body
      }
    })
  }
}

/**
 * 统一返回格式
 * @param {Context} ctx
 * @param {Next} next
 * @returns
 */
// export const responseBody = async (ctx: Context, next: Next) => {
//   try {
//     const time = (Date.now() + 8 * 60 * 60 * 1000).toString()
//     ctx.success = ({
//       data,
//       type = 'json',
//       message = '获取成功',
//       code = 200
//     }: I_Response<unknown>) => {
//       ctx.type = type
//       ctx.body = {
//         code,
//         message,
//         time,
//         success: true,
//         data
//       }
//     }
//     ctx.fail = ({
//       message = '获取成功',
//       code = 400,
//       type = 'json'
//     }: I_Response<unknown>) => {
//       ctx.type = type
//       ctx.body = {
//         code: code,
//         time,
//         request: {
//           method: ctx.request.method,
//           url: ctx.request.url,
//           [Object.keys(ctx.params).length ? 'params' : Symbol.for('params')]:
//             ctx.params,
//           [Object.keys(ctx.request.query).length
//             ? 'query'
//             : Symbol.for('query')]: ctx.request.query,
//           [Object.keys(ctx.request.body).length ? 'body' : Symbol.for('body')]:
//             ctx.request.body
//         },
//         message: message,
//         success: false
//       }
//     }
//     await next()
//   } catch (error) {
//     ctx.throw(500, error.message)
//   }
// }
